update:
	proc;
	/* update mode */
	%replace
		true  by '1'b,
		false by '0'b;

	%include 'attrib.dcl';

	%include 'key.dcl';

	dcl
		data  file,
		sysin file,
		rec   char(max_siz);
	dcl
		i fixed,
		answer char(2) var;
	dcl
		open_data   entry,
		close_data  entry,
		input_key   entry(char(max_siz)),
		locate_key  entry(char(max_siz)) returns(bit),
		alter_rec   entry(char(max_siz)),
		att_len     entry(fixed) returns(fixed),
		hdr_out     entry(fixed),
		att_out     entry(fixed,char(max_siz)),
		att_in      entry(fixed,char(max_siz)) returns(bit),
		att_err     entry;

	on endfile(sysin)
		go to end_upd;

	call open_data();

	put edit('Update Mode','')(skip,a);
		do while(true);
		/* read next request */
		put skip;
		call input_key(rec);
		if locate_key(rec) then
			do;
				do i = 2 to att_cnt;
				change_field:
					proc;
						do while(true);
						call hdr_out(i);
						call att_out(i,rec);
						if att_in(i,rec) then
							return;
						call att_err();
						end;
					end change_field;
				call change_field();
				end;
			put edit('Ok to Change (y/n)?')
				(column(4),a);
			get list(answer);
			if answer = 'y' then
				call alter_rec(rec);
			end;
		end;

	end_upd:
	call close_data();
	end update;
